package com.kuang.system.service;

import com.kuang.bascic.service.BaseServiceImpl;
import com.kuang.system.domain.Role;
import com.kuang.system.domain.Role;
import com.kuang.system.mapper.RoleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class RoleServiceImpl extends BaseServiceImpl<Role> implements RoleService {
    @Autowired
    private RoleMapper roleMapper;
    @Override
    public List<Role> selectTreeDepartment() {
            // 1查询出所有的部门
            List<Role> menus = roleMapper.selectAllDepartment();
            // 思路： 将所有部门放进map key：为自己的id vulue：自己部门
            Map<Long, Role> menuMaps = new HashMap<>();
            for (Role d : menus) {
                // 遍历全部部门 将所有部门放进map key：为自己的id vulue：自己部门
                menuMaps.put(d.getId(), d);
            }
            // 2.查出所用的顶级部门  parent_id =null的部门
            List<Role> leve1List = new ArrayList<>();
            for (Role dept : menus) {
                if (dept.getId() == null) {
                    // 如果等于空说明这个部门是顶级部门 放入顶级部门的数组
                    leve1List.add(dept);
                    // 说明是子级部门 将自己加入父级部门
                    // 这里根据集合的方法根据dept的parent_id去匹配集合的id查到的是当前的父部门
                } else {
                    Role parent = menuMaps.get(dept.getId());
                    if (parent != null) {
//                        parent.getChildren().add(dept);

                    }
                }
            }
            return leve1List;

        }

    @Override
    public void addDepartment(Role role) {
       // 保存角色
        roleMapper.addDepartment(role);
        // 保存角色菜单表
        insertIntoMenuAndPremission(role);
        // 保存角色权限表

    }

    private void insertIntoMenuAndPremission(Role role) {
        //先清空表单 在传入 只录入前端传的权限和菜单
        roleMapper.removeMeun(role.getId());
        roleMapper.romePremission(role.getId());
        //  保存角色权限表 保存角色菜单表
        roleMapper.saveRolePremission(role.getId(),role.getPermissions());
        roleMapper.saveRoleMenu(role.getId(),role.getMenus());
    }
}
